﻿using DbEntityTools.Model.Entities;
using System.Collections.Generic;

namespace DbEntityTools.Model
{
    public class FieldModel
    {
        static Dictionary<string, string> dataTypeDic = new Dictionary<string, string>();

        static FieldModel()
        {
            dataTypeDic.Add("tinyint", "int");
            dataTypeDic.Add("smallint", "int");
            dataTypeDic.Add("mediumint", "int");
            dataTypeDic.Add("integer", "int");
            dataTypeDic.Add("numeric", "decimal");
            dataTypeDic.Add("real", "decimal");
            dataTypeDic.Add("bit", "bool");

            dataTypeDic.Add("date", "DateTime");
            dataTypeDic.Add("time", "DateTime");
            dataTypeDic.Add("year", "DateTime");
            dataTypeDic.Add("datetime", "DateTime");
            dataTypeDic.Add("timestamp", "DateTime");


            dataTypeDic.Add("char", "string");
            dataTypeDic.Add("varchar", "string");
            dataTypeDic.Add("tinytext", "string");
            dataTypeDic.Add("text", "string");
            dataTypeDic.Add("mediumtext", "string");
            dataTypeDic.Add("longtext", "string");
        }

        public string Name { get; set; }
        public string Type { get; set; }
        public string Comment { get; set; }

        public bool IsPrimaryKey { get; set; }

        public bool IsIdentity { get; set; }

        public string DefaultValue { get; set; }

        public FieldModel() { }

        public FieldModel(FieldEntity field)
        {
            this.Name = field.Field;
            this.Type = dataTypeDic.ContainsKey(field.DataType) ? dataTypeDic[field.DataType] : field.DataType;
            this.Comment = field.FieldDes;
            this.DefaultValue = field.DefaultValue;
            this.IsPrimaryKey = field.KeyType.ToLower().Equals("pri");
            this.IsIdentity = field.Extra.ToLower().Equals("auto_increment");
        }
    }
}
